package drds.checksum;

import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;

public class App {

	public static void main(String[] args) throws Exception {

		String tableName = "u";
		String[] columnNames = new String[] { "name", "x" };
		String whereCondition = " where 1=1 ";
		whereCondition += " and (id>=1 and id<=10000)";
		//
		Map<String, String> map = drds.checksum.DbUtils.getDataBaseInfo1();
		Crc32s.createCrc32(tableName, columnNames, whereCondition, map);

		TreeMap<String, String> treeMap1 = new TreeMap<String, String>();
		TreeMap<String, String> treeMap2 = new TreeMap<String, String>();
		//
		String crc32String1_1 = "1_1";
		// String crc32String1_2 = "2_2";
		String crc32String1_3 = "x1_y1";
		String crc32String1_4 = "4_4";

		// String crc32String2_1 = "1_1";
		String crc32String2_2 = "2_2";
		String crc32String2_3 = "x2_y2";
		String crc32String2_4 = "4_4";

		if (1 == 1) {
			treeMap1.put("1", crc32String1_1);
			// treeMap1.put("2", crc32String1_2);
			treeMap1.put("3", crc32String1_3);
			treeMap1.put("4", crc32String1_4);

			// treeMap2.put("1", crc32String2_1);
			treeMap2.put("2", crc32String2_2);
			treeMap2.put("3", crc32String2_3);
			treeMap2.put("4", crc32String2_4);
		}
		System.out.println("数据装载成功");
		TreeMap<String, String> result = Crc32s.crc32Compare(columnNames, treeMap1, treeMap2);

		for (String key : result.keySet()) {
			System.out.println("index:" + key + "  info:" + result.get(key));
			break;
		}
		// 1必须分段进行校验 不可能对所有的数据进行校验，那么1保存old数据的历史记录 2需要进行新的校验拆分执行计划 3如果校验失败则需要建立数据恢复计划
		// 如果恢复失败则需要通知人工解决。
		// 只要slave端crc32_fix_version和当前一致即可。这是快速满足校验的方法
		// 难点是 master-slave端 是不是所有的slave端进行对比 以及两个服务器间十分存在(指定业务数据库进行对比)

		// 采用二分法进行数据对比10000 1 先10000整体, 2再前5000，后5000。然后针对这5000条数据再进行细分。
		// 需要保证这N数据有序
		// select CRC32(SUM(crc32)) FROM u(必须带上crc32有效操作范围), crc32的出来的是数字

	}

}
